// 文本左右对齐
/**
 * @param {string[]} words
 * @param {number} maxWidth
 * @return {string[]}
 */
 var fullJustify = function(words, maxWidth) {
    const res = [];
       let str = "";
       let tempLen = 0;
       //双指针
       let i = 0,
           j = 0
   
       //快指针遍历单词
       while (j < words.length) {
   
           const wordLen = words[j].length;
           //如果当前行还能容纳单词，则把长度累加上占坑
           if (tempLen + wordLen <= maxWidth - (j - i)) { //每个单词间至少要有一个空格，按照最极限来占位
               tempLen += wordLen;
               j++;
           } else {
               //如果当前行无法容纳单词了，则需要结算一下
   
               //先计算需要补充的空格数
               let spaceNum
               const wordNum = j - i;
   
               //用空余长度除以间隔数，如果只有一个单词moreSpace设为0
               let moreSpace = (maxWidth - tempLen) % (wordNum - 1) || 0;
               if (wordNum === 1) {
                   spaceNum = maxWidth - tempLen;
               } else {
                   if (moreSpace === 0) {
                       //如果刚好除的开，则直接平分
                       spaceNum = (maxWidth - tempLen) / (wordNum - 1);
                   } else {
                       spaceNum = (maxWidth - tempLen - moreSpace) / (wordNum - 1);
                   }
               }
   
   
               //拼接字符串
               for (let k = i; k < j; k++) {
                   str += words[k];
                   //如果空格无法均分则从左到右每个单词加一个空格，直到多余空格分配完毕
                   if (moreSpace-- > 0) {
                       str += " ";
                   }
   
                   //加上算好的空格数，最后一个单词不加空格(除非是唯一一个)
                   if (k !== j - 1 || wordNum === 1) {
                       for (let num = 0; num < spaceNum; num++) {
                           str += " ";
                       }
                   }
               }
   
               //拼接完字符串后添加到结果中去，并清空状态
               res.push(str);
               str = "";
               tempLen = 0;
               i = j; //慢指针指向快指针
           }
   
       }
   
       //当遍历结束，判断一下最后一行还有没有单词
       if (tempLen) {
           //拼接字符串
           for (let k = i; k < j; k++) {
               str += words[k];
   
               //最后一行除了末尾，一词一个空格，谁也不许多要！
               if (k !== j - 1) {
                   str += " ";
               }
           }
   
           //最后补空格让长度到maxWidth
           while (str.length < maxWidth) {
               str += " ";
           }
   
           res.push(str);
       }
   
       return res;
   };